package com.xhh.nphm.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xhh.nphm.system.domain.AfficheComment;
import com.xhh.nphm.system.domain.Saffiche;
import com.xhh.nphm.system.service.SafficheService;
import com.xhh.nphm.system.mapper.SafficheDao;
import org.apache.ibatis.annotations.Param;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

/**
* @author Administrator
* @description 针对表【sAffiche】的数据库操作Service实现
* @createDate 2022-06-24 14:36:49
*/
@Service
public class SafficheServiceImpl extends ServiceImpl<SafficheDao, Saffiche>
    implements SafficheService{

    @Autowired
    private SafficheDao safficheDao;
    /**
     * 系统公告管理列表数据
     *
     * @param saffiche 封装查询条件
     * @return 列表数据
     */
    @Override
    public List<Map<String,Object>> afficheListJson(Saffiche saffiche) {
        //管理员账号
        if (saffiche.getUserNo()==1) {
            return getBaseMapper().afficheListJson(saffiche);
        }
        return getBaseMapper().byUserNoFindAffiche(saffiche);
    }

    /**
     * 系统通知公告列表数据
     *
     * @param role 用户角色
     * @param saffiche 封装查询条件
     * @return 列表数据
     */
    @Override
    public List<Map<String, Object>> ntcListJson(String role, Saffiche saffiche) {
        return getBaseMapper().ntcListJson(role,saffiche);
    }

    @Override
    public List<Saffiche> getSafByRole(String roleId) {
        QueryWrapper<Saffiche> wrapper = new QueryWrapper<>();
        wrapper.like("ObjRole",roleId).orderByDesc("IssueTime");
        return safficheDao.selectList(wrapper);
    }

    @Override
    public List<Saffiche> getNotice(String roleId, String content, Long userId) {
        return asRequiredSort(safficheDao.getNotice(roleId, content, userId));
    }

    @Override
    public List<Saffiche> queryDeptNotice(List<String> list,Long userId,String content) {
        List<Saffiche> safficheList = safficheDao.byDeptNameFindAffiche(list, userId, content);
//        safficheList.addAll(safficheDao.queryFullDeptAffiche(userId,content));
        return asRequiredSort(safficheList);
    }

    /**
     * @Description: 指定排序规则排序
     * @Param: [safficheList]
     * @return: java.util.List<com.xhh.nphm.system.domain.Saffiche>
     */
    private List<Saffiche>  asRequiredSort(List<Saffiche> safficheList){
        //指定排序规则
        List<String> sortList = Arrays.asList("紧急","重要","专向","普通");
        return safficheList.stream().sorted(Comparator.comparing(Saffiche::getSortName,(x,y)->{
                    if(x == null && y != null){
                        return 1;
                    }else if(x !=null && y == null){
                        return -1;
                    }else if(x == null && y == null){
                        return -1;
                    }else{
                        //按照读取的list顺序排序
                        for(String sort : sortList){
                            if(sort.equals(x) || sort.equals(y)){
                                if(x.equals(y)){
                                    return 0;
                                }else if(sort.equals(x)){
                                    return -1;
                                }else{
                                    return 1;
                                }
                            }
                        }
                        return 0;
                    }
                })).collect(Collectors.toList());
    }

    @Override
    public List<Saffiche> getUrgentAffiche(String roleId, Long userId) {
        return safficheDao.getUrgentAffiche(roleId,userId);
    }

    @Override
    public List<Saffiche> getImportantAffiche(String roleId, Long userId) {
        return safficheDao.getImportantAffiche(roleId,userId);
    }

    @Override
    public List<Saffiche> getCommonAffiche(String roleId, Long userId) {
        return safficheDao.getCommonAffiche(roleId,userId);
    }

    @Override
    public List<Saffiche> getReadAffiche(Long userId) {
        return asRequiredSort(safficheDao.getReadAffiche(userId));
    }

    @Override
    public List<AfficheComment> getAfficheComment(Integer afficheId) {
        return builderComment(safficheDao.getAfficheComment(afficheId));
    }

    @Override
    public Boolean updateAfficheRead(String afficheId) {
        return safficheDao.updateAfficheRead(afficheId);
    }

    @Override
    public List<Saffiche> selectSafficheByRoles(String roles) {
        return safficheDao.selectSafficheByRoles(roles);
    }

    @Override
    public List<Saffiche> selectSafficheByDeptIds(String deptIds) {
        return safficheDao.selectSafficheByDeptIds(deptIds);
    }

    private List<AfficheComment> builderComment(List<AfficheComment> commentList){
        //查找所有一级评论 -1
        List<AfficheComment> parentComments = new ArrayList<>();
        //子级评论
        List<AfficheComment> sonComments = new ArrayList<>();
        for (AfficheComment comment : commentList) {
            //顶级评论
            if(comment.getParentCommentId() == -1){
                //初始化
                comment.setCommentList(new ArrayList<>());
                //装入一级评论的list中
                parentComments.add(comment);
            }else {
                sonComments.add(comment);
            }
        }
        //遍历一级评论,将下级评论装入对应集合,并设置回复关系
        for (AfficheComment parentComment : parentComments) {
            for (AfficheComment sonComment : sonComments) {
                if (sonComment.getParentCommentId().equals(parentComment.getCommentId())) {
                    //设置回复关系
                    sonComment.setReplyTo(parentComment.getUserName());
                    parentComment.getCommentList().add(sonComment);
                }
            }
        }
        return parentComments;
    }
}




